/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package backingbeans;

import co.uam.soi.entity.Evento;
import co.uam.soi.entity.GrupoPersona;
import co.uam.soi.entity.Persona;
import co.uam.soi.session.PersonaFacadeLocal;
import co.uam.soi.util.SoiUtil;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

/**
 *
 * @author Zyx
 */
@SessionScoped
@ManagedBean(name="personaAction")
public class PersonaAction {
    private Persona persona = new Persona();
    @EJB
    private PersonaFacadeLocal personaFacadeLocal;
    private List<Persona> listaPersonas = new ArrayList<Persona>();
    private String idPersona = null;

    public void guardarPersona() {
        System.out.println("Comando botón "+persona.getNombre());
        
        persona.setEventoCollection(new ArrayList<Evento>());
        persona.setGrupoPersonaCollection(new ArrayList<GrupoPersona>());
        try {
            personaFacadeLocal.create(persona);
        } catch (Exception e) {
           // e.printStackTrace();
        }
       
    }
    /**
     * Método que permite eliminar un registro
     * de tipo persona de la base de datos
     */
    public void eliminarPersona() {
        idPersona = (String)SoiUtil.obtenerParametro("idPersona");
        if(idPersona != null) {
            System.out.println("parametro "+idPersona);
            try {
                persona = obtenerPersonaPorId(Short.parseShort(idPersona));
                personaFacadeLocal.remove(persona);
            } catch (Exception e) {
                 System.out.println("Error al intentar eliminar el obj Persona por medio del ID: "+idPersona);
            }
        }
        
    }

    /**
     * Método que permite obtener un obj de tipo persona
     * por medio del id
     * @param id
     * @return
     */
    public Persona obtenerPersonaPorId(Short id) {
        Persona personaObtenida = new Persona();
        try {
            personaObtenida = personaFacadeLocal.find(id);
        } catch (Exception e) {
             System.out.println("Error al intentar obtener el obj Persona por medio del ID: "+idPersona);
        }
        return personaObtenida;
    }

    /**
     * Método que permite cargarla edición de un objeto
     * de tipo Persona para ser cargado el formulario
     * @return
     */
    public String cargarEditarPersona() {
        idPersona = (String)SoiUtil.obtenerParametro("idPersona");
        //idPersona = (String)FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("idPersona");
       //FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("productId")
        if(idPersona != null) {
            System.out.println("parametro "+idPersona);
            try {                
                persona = obtenerPersonaPorId(Short.parseShort(idPersona));
            } catch (Exception e) {
                 System.out.println("Error al intentar obtener el obj Persona por medio del ID: "+idPersona);
            }

        }
        return "EDITAR_PERSONA";
    }

    /**
     * 
     */
    public void editarPersona() {
        try {
            personaFacadeLocal.edit(persona);
        } catch (Exception e) {
             System.out.println("Error al intentar obtener el obj Persona por medio del ID: "+idPersona);
        }
    }

    /**
     * Método de invocación y redirección
     * para cargar la lista de personas que se encuentran enla
     * base de datos
     * @return String
     */
    public String cargarListaPersonas() {
        // Se inicializa la variable Persona
        persona = new Persona();
        idPersona = null;
        // Se obtiene la lista de personas que hay en la base de datos
        listaPersonas = obtenerListaPersona();
        return "LISTAR_PERSONA";
    }
    /**
     * Método que permite obtener la lista de personas
     * para ser mostradas en tabla de búsqueda
     * @return
     */
    public List<Persona> obtenerListaPersona() {
        List<Persona> listaPersona = new ArrayList<Persona>();
        try {
            listaPersona = personaFacadeLocal.findAll();
        } catch (Exception e) {
            System.out.println("Error al intentar obtener la lista de personas");
        }
        return listaPersona;
    }

    // Métodos de redirección

    /**
     *
     * @return
     */
    public String cargarPersona() {
        return "CREAR_PERSONA";
    }

    /**
     * 
     * @return
     */
    public String volverMenu() {
        return "PERSONA_MENU";
    }

    

    public Persona getPersona() {
        return persona;
    }

    public void setPersona(Persona persona) {
        this.persona = persona;
    }

    public List<Persona> getListaPersonas() {
        return listaPersonas;
    }

    public void setListaPersonas(List<Persona> listaPersonas) {
        this.listaPersonas = listaPersonas;
    }

    public String getIdPersona() {
        return idPersona;
    }

    public void setIdPersona(String idPersona) {
        this.idPersona = idPersona;
    }


}
